package org.example.pro2_apobase.jdkproxy;

public class TestJdkProxy {
    public static void main(String[] args) {

        System.setProperty("jdk.proxy.ProxyGenerator.saveGeneratedFiles","true");   //jdk8以后的
        //创建目标对象
        OrderBiz orderBiz=new OrderBizaImpl();
        //创建代理对象
        MyAdviceInvocationHandler mi=new MyAdviceInvocationHandler(orderBiz);
        //获取代理对象
        OrderBiz orderBizProxy=(OrderBiz) mi.getProxy();
        System.out.println(orderBizProxy);
        //该方法调用了orderBizProxy的toString方法，toString方法调用了invoke方法，invoke方法调用了mi.getProxy()方法，mi.getProxy()方法返回了orderBizProxy对象

        //调用代理对象的方法
//        orderBizProxy.saveOrder(1);
//        orderBizProxy.updateOrder(1,100);
        orderBizProxy.showOrder();
        //直接跳转invoke方法的原因：
        //JDK 动态代理借助 java.lang.reflect.Proxy 类与 java.lang.reflect.InvocationHandler 接口来达成。Proxy 类能在运行时生成代理类，InvocationHandler 接口则负责处理代理对象方法的调用。
        //当你调用代理对象的方法时，代理对象不会直接执行目标对象的对应方法，而是把方法调用委派给 InvocationHandler 的 invoke 方法。invoke 方法会在其中执行额外逻辑，并且调用目标对象的实际方法。
    }
}
